package com.yb.designpattern.produce;

import java.util.ArrayList;
import java.util.List;

/**
 * 仓库 缓冲区 用于产品的生产，存储，消费
 * 
 * @author Administrator
 *
 * @param <T>
 */
public class Storage<T> {
	private int index = 0;
	private static final int MAX = 10;//仓库的最大容量
	private List<T> storages = new ArrayList<T>(MAX);//存储集合
	public synchronized void produce(T item){
		while(index>=MAX){
			System.out.println("仓库满了，等待中");
			try {
				this.wait();
				System.out.println("仓库不满，开始生产");
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		System.out.println("生产>>" + item.toString());
		storages.add(item);
        index++;   //先添加item，在进行加1操作
        notify();  //唤醒在此对象监视器上等待的单个线程，即消费者线程
	}
	
	public synchronized T consume(){
		while(index<=0){
			System.out.println("仓库空了，等待中");
			try {
				this.wait();
				System.out.println("仓库不为空，开始消费");
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		index--;
		T item = storages.remove(index);
		System.out.println("消费>>" + item.toString());
		notify();
		return item;
	}

}
